package org.glut.AppStoreProject.utils;

import com.mysql.cj.xdevapi.SessionFactory;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtil {
    //单一数据库的全局对象,多线程安全
    public static SqlSessionFactory sessionFactory = null;

    // 作用：
    //  1.类加载时初始化MyBatis的核心对象SqlSessionFactory
    //  2.只需要初始化一次，所以放在静态块中
    //  3.SqlSessionFactory是线程安全的，可以全局共享
    static {
        String config = "mybatis-config.xml";
        try {
            //读入配置文件
            InputStream in = Resources.getResourceAsStream(config);
            //解析配置并得到 SqlSessionFactory
            sessionFactory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取 SqlSession
     *
     * @return
     */
    public static SqlSession getSession() {
        // 为什么sqlSession不用close？但是connection却需要用close？
        return sessionFactory.openSession();
    }

    public static SqlSession openSession() {
        return sessionFactory.openSession();
    }

}
